/************
 * 给前端用的路由全局前置守卫
 * 进行权限的判断并指向对应路由
 * Created by donkey on 2017/12/22
 ************/

import store from '@/store'
import { getToken } from '@/common/permission/auth'

const whiteList = ['/loginFed'] // 不重定向白名单


function fed(to, from, next, router) {
    // if(getToken()){ //判断,如果登录成功
    if (getToken()) {
        if(to.path === '/loginFed'){ // 如果登录了就还显示登录干嘛?直接进入啥!
            setTimeout(() => { // hack方法解决进来后不跳走的问题.
                next(store.getters.addRouters[0].path)// 登录成功后跳第一个菜单
            })
        }
        if(!store.getters.stopGoBack){ // 进入子路由将页面锁死,等待子路由的操作
            if(!store.getters.role){   // 如果vuex中没有用户权限信息

                store.dispatch('GetInfo')                  // 获取ajax用户权限然后存储到vuex
                    .then((info) => {
                        Object.defineProperty(window.Vue.prototype, '$USER', { value:info.user })   // 把用户信息放到全局
                    })
                    .then(() => store.dispatch('GenerateRoutes', router))        // 生成动态路由
                    .then(() => router.addRoutes(store.getters.addRouters))      // 最后把动态路由加入路由中,正真跑起来
                    .then(() => {next({ ...to })})                               // hack方法 确保addRoutes已完成
            }else{ // 否则用户权限信息和路由生成已经完成无需其他操作直接进行下一步
                next();
            }
        }
    }else{ // 否则只能进白名单页面
        if(whiteList.indexOf(to.path) !== -1){       // 在免登录白名单，直接进入
            next()
        }else{
            next('/loginFed')
        }
    }
}

export default fed
